///*******************************************************************************
// * Copyright (c) 2007 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// ******************************************************************************/
//
//package org.eclipse.ui.tests.keys;
//
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.Iterator;
//import java.util.List;
//
//import org.eclipse.core.commands.ParameterizedCommand;
//import org.eclipse.jface.bindings.Binding;
//import org.eclipse.jface.bindings.keys.KeyBinding;
//import org.eclipse.jface.bindings.keys.KeySequence;
//import org.eclipse.jface.util.IPropertyChangeListener;
//import org.eclipse.jface.util.PropertyChangeEvent;
//import org.eclipse.ui.contexts.IContextService;
//import org.eclipse.ui.internal.keys.model.BindingElement;
//import org.eclipse.ui.internal.keys.model.BindingModel;
//import org.eclipse.ui.internal.keys.model.CommonModel;
//import org.eclipse.ui.internal.keys.model.ConflictModel;
//import org.eclipse.ui.internal.keys.model.ContextElement;
//import org.eclipse.ui.internal.keys.model.ContextModel;
//import org.eclipse.ui.internal.keys.model.KeyController;
//import org.eclipse.ui.internal.keys.model.ModelElement;
//import org.eclipse.ui.internal.keys.model.SchemeElement;
//import org.eclipse.ui.internal.keys.model.SchemeModel;
//import org.eclipse.ui.keys.IBindingService;
//import org.eclipse.ui.tests.harness.util.UITestCase;
//
///**
// * @since 3.4
// * 
// */
//public class KeysPreferenceModelTest extends UITestCase {
//
//	private static final String ID_QUICK_SWITCH = "org.eclipse.ui.window.openEditorDropDown";
//	private static final String SCHEME_EMACS_ID = "org.eclipse.ui.emacsAcceleratorConfiguration";
//	private static final String ID_QUICK_ACCESS = "org.eclipse.ui.window.quickAccess";
//	private static final String ID_ACTIVATE_EDITOR = "org.eclipse.ui.window.activateEditor";
//	private static final String ID_ABOUT = "org.eclipse.ui.help.aboutAction";
//	private static final String ID_CMD_CONFLICT1 = "org.eclipse.ui.tests.keyModel.conflict1";
//	private static final String ID_CMD_CONFLICT2 = "org.eclipse.ui.tests.keyModel.conflict2";
//	private static final String ID_CMD_CONFLICT3 = "org.eclipse.ui.tests.keyModel.conflict3";
//	private static final String ID_CMD_CONFLICT4 = "org.eclipse.ui.tests.keyModel.conflict4";
//	private static final String ID_CMD_EMACS1 = "org.eclipse.ui.tests.keyModel.emacs1";
//
//	/**
//	 * @param testName
//	 */
//	public KeysPreferenceModelTest(String testName) {
//		super(testName);
//	}
//
//	public void testDefaults() throws Exception {
//		KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		ContextModel cm = controller.getContextModel();
//		boolean foundWindow = false;
//		boolean foundDialog = false;
//		Iterator i = cm.getContexts().iterator();
//		while (i.hasNext()) {
//			ContextElement elem = (ContextElement) i.next();
//			if (elem.getId().equals(IContextService.CONTEXT_ID_WINDOW)) {
//				foundWindow = true;
//			} else if (elem.getId().equals(IContextService.CONTEXT_ID_DIALOG)) {
//				foundDialog = true;
//			}
//		}
//		assertTrue("No window context", foundWindow);
//		assertTrue("No dialog context", foundDialog);
//		assertNull(cm.getSelectedElement());
//		assertNotNull(cm.getContextIdToElement().get(
//				IContextService.CONTEXT_ID_DIALOG_AND_WINDOW));
//
//		SchemeModel sm = controller.getSchemeModel();
//		boolean foundDefault = false;
//		i = sm.getSchemes().iterator();
//		while (i.hasNext()) {
//			SchemeElement e = (SchemeElement) i.next();
//			if (e.getId().equals(
//					IBindingService.DEFAULT_DEFAULT_ACTIVE_SCHEME_ID)) {
//				foundDefault = true;
//			}
//		}
//		assertTrue("No default scheme", foundDefault);
//		assertEquals(IBindingService.DEFAULT_DEFAULT_ACTIVE_SCHEME_ID, sm
//				.getSelectedElement().getId());
//
//		ConflictModel cf = controller.getConflictModel();
//		assertNull("There should not be any conflicts", cf.getConflicts());
//		assertNull(cf.getSelectedElement());
//
//		BindingModel bm = controller.getBindingModel();
//		BindingElement quickAccess = getBindingElement(bm, ID_QUICK_ACCESS);
//		assertNotNull(quickAccess);
//		assertNull(bm.getSelectedElement());
//	}
//
//	public void testContexts() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		ContextModel cm = controller.getContextModel();
//		ContextElement dialog = (ContextElement) cm.getContextIdToElement()
//				.get(IContextService.CONTEXT_ID_DIALOG);
//		assertNull(cm.getSelectedElement());
//		assertNotNull(dialog);
//
//		final ArrayList events = new ArrayList();
//		// test setup vars
//		controller.addPropertyChangeListener(new IPropertyChangeListener() {
//			public void propertyChange(PropertyChangeEvent event) {
//				events.add(event);
//			}
//		});
//		cm.setSelectedElement(dialog);
//
//		assertTrue(cm.getSelectedElement() == dialog);
//
//		assertEquals(1, events.size());
//
//		ContextElement window = (ContextElement) cm.getContextIdToElement()
//				.get(IContextService.CONTEXT_ID_WINDOW);
//		assertNotNull(window);
//
//		cm.setSelectedElement(window);
//		assertEquals(2, events.size());
//
//		cm.setSelectedElement(null);
//		assertEquals(3, events.size());
//
//		PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
//				new PropertyChangeEvent(controller.getContextModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, null, dialog),
//				new PropertyChangeEvent(controller.getContextModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, dialog, window),
//				new PropertyChangeEvent(controller.getContextModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, window, null) };
//		assertChanges(expected, events);
//	}
//
//	public void testBindings() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		ContextModel cm = controller.getContextModel();
//		BindingModel bm = controller.getBindingModel();
//		BindingElement activateEditor = getBindingElement(bm,
//				ID_ACTIVATE_EDITOR);
//		assertNotNull(activateEditor);
//		assertNotNull(activateEditor.getContext());
//		assertNull(bm.getSelectedElement());
//
//		// test setup vars
//		final ArrayList events = new ArrayList();
//		controller.addPropertyChangeListener(new IPropertyChangeListener() {
//			public void propertyChange(PropertyChangeEvent event) {
//				events.add(event);
//			}
//		});
//
//		bm.setSelectedElement(activateEditor);
//
//		assertTrue(bm.getSelectedElement() == activateEditor);
//		assertNotNull(cm.getSelectedElement());
//		assertTrue(cm.getSelectedElement().getId().equals(
//				activateEditor.getContext().getId()));
//
//		PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
//				new PropertyChangeEvent(controller.getConflictModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, null, activateEditor),
//				new PropertyChangeEvent(controller.getContextModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, null, activateEditor
//								.getContext()),
//				new PropertyChangeEvent(controller.getBindingModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, null, activateEditor), };
//		assertChanges(expected, events);
//
//		events.clear();
//		bm.setSelectedElement(null);
//		assertNull(bm.getSelectedElement());
//		assertNull(cm.getSelectedElement());
//
//		expected = new PropertyChangeEvent[] {
//				new PropertyChangeEvent(controller.getConflictModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, activateEditor, null),
//				new PropertyChangeEvent(controller.getContextModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, activateEditor
//								.getContext(), null),
//				new PropertyChangeEvent(controller.getBindingModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, activateEditor, null) };
//		assertChanges(expected, events);
//	}
//
//	public void testBasicConflicts() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		final ConflictModel cf = controller.getConflictModel();
//		final BindingModel bm = controller.getBindingModel();
//		final BindingElement conflict1 = getBindingElement(bm, ID_CMD_CONFLICT1);
//		assertNotNull(conflict1);
//		assertEquals(Boolean.TRUE, conflict1.getConflict());
//		final BindingElement activateEditor = getBindingElement(bm,
//				ID_ACTIVATE_EDITOR);
//		assertNotNull(activateEditor);
//		assertEquals(Boolean.FALSE, activateEditor.getConflict());
//
//		// test setup vars
//		final ArrayList events = new ArrayList();
//		controller.addPropertyChangeListener(new IPropertyChangeListener() {
//			public void propertyChange(PropertyChangeEvent event) {
//				events.add(event);
//			}
//		});
//
//		bm.setSelectedElement(conflict1);
//		assertEquals(conflict1, bm.getSelectedElement());
//		assertEquals(conflict1, cf.getSelectedElement());
//
//		final Collection conflicts = cf.getConflicts();
//		assertEquals(3, conflicts.size());
//
//		PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
//				new PropertyChangeEvent(controller.getConflictModel(),
//						ConflictModel.PROP_CONFLICTS, null, conflicts),
//				new PropertyChangeEvent(controller.getConflictModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, null, conflict1),
//				new PropertyChangeEvent(controller.getContextModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, null, conflict1
//								.getContext()),
//				new PropertyChangeEvent(controller.getBindingModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, null, conflict1) };
//
//		assertChanges(expected, events);
//
//		events.clear();
//		bm.setSelectedElement(activateEditor);
//		assertEquals(activateEditor, bm.getSelectedElement());
//
//		expected = new PropertyChangeEvent[] {
//				new PropertyChangeEvent(controller.getConflictModel(),
//						ConflictModel.PROP_CONFLICTS, conflicts, null),
//				new PropertyChangeEvent(controller.getConflictModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, conflict1,
//						activateEditor),
//				new PropertyChangeEvent(controller.getContextModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, conflict1
//								.getContext(), activateEditor.getContext()),
//				new PropertyChangeEvent(controller.getBindingModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, conflict1,
//						activateEditor) };
//
//		assertChanges(expected, events);
//	}
//
//	public void testConflictSelection() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		final ConflictModel cf = controller.getConflictModel();
//		final BindingModel bm = controller.getBindingModel();
//		final BindingElement conflict1 = getBindingElement(bm, ID_CMD_CONFLICT1);
//		final BindingElement conflict3 = getBindingElement(bm, ID_CMD_CONFLICT3);
//
//		// test setup vars
//		final ArrayList events = new ArrayList();
//		controller.addPropertyChangeListener(new IPropertyChangeListener() {
//			public void propertyChange(PropertyChangeEvent event) {
//				events.add(event);
//			}
//		});
//
//		bm.setSelectedElement(conflict1);
//		assertEquals(conflict1, bm.getSelectedElement());
//		assertEquals(conflict1, cf.getSelectedElement());
//
//		assertEquals(4, events.size());
//
//		events.clear();
//
//		cf.setSelectedElement(conflict3);
//		assertEquals(conflict3, bm.getSelectedElement());
//		assertEquals(conflict3, cf.getSelectedElement());
//
//		PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
//				new PropertyChangeEvent(controller.getBindingModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, conflict1, conflict3),
//				new PropertyChangeEvent(controller.getConflictModel(),
//						CommonModel.PROP_SELECTED_ELEMENT, conflict1, conflict3) };
//		assertChanges(expected, events);
//	}
//
//	public void testCreateConflict() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		final ConflictModel cf = controller.getConflictModel();
//		final BindingModel bm = controller.getBindingModel();
//		BindingElement about = getBindingElement(bm, ID_ABOUT);
//		assertNotNull(about);
//		assertNull(about.getTrigger());
//
//		BindingElement active = getBindingElement(bm, ID_ACTIVATE_EDITOR);
//		assertNotNull(active);
//		assertNotNull(active.getTrigger());
//		assertEquals(Boolean.FALSE, active.getConflict());
//
//		bm.setSelectedElement(about);
//
//		about.setTrigger(KeySequence.getInstance("F12"));
//		assertEquals(Boolean.TRUE, about.getConflict());
//		assertEquals(Boolean.TRUE, active.getConflict());
//		assertEquals(about, cf.getSelectedElement());
//
//		about.setTrigger(KeySequence.getInstance("F12 A"));
//		assertEquals(Boolean.FALSE, about.getConflict());
//		assertEquals(Boolean.FALSE, active.getConflict());
//		assertEquals(about, cf.getSelectedElement());
//		assertNull(cf.getConflicts());
//
//		about.setTrigger(null);
//		assertEquals(Boolean.FALSE, about.getConflict());
//		assertEquals(Boolean.FALSE, active.getConflict());
//		assertEquals(about, cf.getSelectedElement());
//		assertNull(cf.getConflicts());
//	}
//
//	public void testConflictRemove() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		final ConflictModel cf = controller.getConflictModel();
//		final BindingModel bm = controller.getBindingModel();
//		BindingElement about = getBindingElement(bm, ID_ABOUT);
//		assertNotNull(about);
//		assertNull(about.getTrigger());
//
//		BindingElement active = getBindingElement(bm, ID_ACTIVATE_EDITOR);
//		assertNotNull(active);
//		assertNotNull(active.getTrigger());
//		assertEquals(Boolean.FALSE, active.getConflict());
//
//		bm.setSelectedElement(about);
//
//		about.setTrigger(KeySequence.getInstance("F12"));
//		assertEquals(Boolean.TRUE, about.getConflict());
//		assertEquals(Boolean.TRUE, active.getConflict());
//		assertEquals(about, cf.getSelectedElement());
//
//		bm.remove();
//		assertEquals(Boolean.FALSE, about.getConflict());
//		assertEquals(Boolean.FALSE, active.getConflict());
//		assertEquals(about, cf.getSelectedElement());
//		assertNull(cf.getConflicts());
//	}
//
//	public void testConflictRestore() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		final ConflictModel cf = controller.getConflictModel();
//		final BindingModel bm = controller.getBindingModel();
//		BindingElement about = getBindingElement(bm, ID_ABOUT);
//		assertNotNull(about);
//		assertNull(about.getTrigger());
//
//		BindingElement active = getBindingElement(bm, ID_ACTIVATE_EDITOR);
//		assertNotNull(active);
//		assertNotNull(active.getTrigger());
//		assertEquals(Boolean.FALSE, active.getConflict());
//
//		bm.setSelectedElement(about);
//
//		about.setTrigger(KeySequence.getInstance("F12"));
//		assertEquals(Boolean.TRUE, about.getConflict());
//		assertEquals(Boolean.TRUE, active.getConflict());
//		assertEquals(about, cf.getSelectedElement());
//
//		bm.restoreBinding(controller.getContextModel());
//
//		active = getBindingElement(bm, ID_ACTIVATE_EDITOR);
//		about = getBindingElement(bm, ID_ABOUT);
//
//		assertEquals(Boolean.FALSE, about.getConflict());
//		assertEquals(Boolean.FALSE, active.getConflict());
//		assertEquals(bm.getSelectedElement(), cf.getSelectedElement());
//		assertNull(cf.getConflicts());
//	}
//
//	public void testUpdateContext() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		final ContextModel cm = controller.getContextModel();
//		final ContextElement dialog = (ContextElement) cm
//				.getContextIdToElement().get(IContextService.CONTEXT_ID_DIALOG);
//		final ContextElement window = (ContextElement) cm
//				.getContextIdToElement().get(IContextService.CONTEXT_ID_WINDOW);
//
//		final BindingModel bm = controller.getBindingModel();
//		final BindingElement conflict2 = getBindingElement(bm, ID_CMD_CONFLICT2);
//		final Binding c2model = (Binding) conflict2.getModelObject();
//		assertEquals(dialog, conflict2.getContext());
//
//		bm.setSelectedElement(conflict2);
//		assertEquals(dialog, cm.getSelectedElement());
//
//		// test setup vars
//		final ArrayList events = new ArrayList();
//		controller.addPropertyChangeListener(new IPropertyChangeListener() {
//			public void propertyChange(PropertyChangeEvent event) {
//				events.add(event);
//			}
//		});
//
//		cm.setSelectedElement(window);
//		assertEquals(window, ((BindingElement) bm.getSelectedElement())
//				.getContext());
//		assertNotSame(c2model, conflict2.getModelObject());
//
//		PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
//				new PropertyChangeEvent(conflict2,
//						BindingElement.PROP_CONFLICT, Boolean.TRUE,
//						Boolean.FALSE),
//				new PropertyChangeEvent(conflict2, BindingElement.PROP_CONTEXT,
//						dialog, window),
//				new PropertyChangeEvent(conflict2,
//						BindingElement.PROP_USER_DELTA, new Integer(
//								Binding.SYSTEM), new Integer(Binding.USER)),
//				new PropertyChangeEvent(conflict2,
//						ModelElement.PROP_MODEL_OBJECT, c2model, conflict2
//								.getModelObject()),
//				new PropertyChangeEvent(cm, CommonModel.PROP_SELECTED_ELEMENT,
//						dialog, window), };
//		assertChanges(expected, events);
//	}
//
//	public void testUpdateKeySequence() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		final ContextModel cm = controller.getContextModel();
//		final ContextElement dialog = (ContextElement) cm
//				.getContextIdToElement().get(IContextService.CONTEXT_ID_DIALOG);
//
//		final BindingModel bm = controller.getBindingModel();
//		final BindingElement conflict1 = getBindingElement(bm, ID_CMD_CONFLICT1);
//		final BindingElement conflict2 = getBindingElement(bm, ID_CMD_CONFLICT2);
//		final BindingElement conflict3 = getBindingElement(bm, ID_CMD_CONFLICT3);
//		final Binding c2model = (Binding) conflict2.getModelObject();
//		final Binding c3model = (Binding) conflict3.getModelObject();
//		final ParameterizedCommand c3parameterized = c3model
//				.getParameterizedCommand();
//		assertEquals(dialog, conflict2.getContext());
//		assertTrue(c2model instanceof KeyBinding);
//		bm.setSelectedElement(conflict2);
//		assertEquals(dialog, cm.getSelectedElement());
//
//		// test setup vars
//		final ArrayList events = new ArrayList();
//		controller.addPropertyChangeListener(new IPropertyChangeListener() {
//			public void propertyChange(PropertyChangeEvent event) {
//				events.add(event);
//			}
//		});
//
//		KeySequence oldKeySequence = (KeySequence) conflict2.getTrigger();
//		KeySequence ctrl5 = KeySequence.getInstance("CTRL+5 N");
//		Object bindingConflict1 = conflict1.getModelObject();
//		conflict2.setTrigger(ctrl5);
//		ConflictModel conflictModel = controller.getConflictModel();
//		ContextModel contextModel = controller.getContextModel();
//		ArrayList oldValue = new ArrayList();
//		oldValue.add(conflict3);
//
//		assertEquals(dialog, ((BindingElement) bm.getSelectedElement())
//				.getContext());
//		assertTrue(conflict2.getModelObject() instanceof KeyBinding);
//		PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
//				new PropertyChangeEvent(conflict2,
//						BindingElement.PROP_CONFLICT, Boolean.TRUE,
//						Boolean.FALSE),
//				new PropertyChangeEvent(conflict2,
//						BindingElement.PROP_USER_DELTA, new Integer(
//								Binding.SYSTEM), new Integer(Binding.USER)),
//				new PropertyChangeEvent(controller.getConflictModel(),
//						ConflictModel.PROP_CONFLICTS_REMOVE, null, conflict2),
//				new PropertyChangeEvent(conflict2,
//						ModelElement.PROP_MODEL_OBJECT, c2model, conflict2
//								.getModelObject()),
//				new PropertyChangeEvent(conflict1,
//						BindingElement.PROP_CONFLICT, Boolean.TRUE,
//						Boolean.FALSE),
//				new PropertyChangeEvent(
//						conflict1,
//						BindingElement.PROP_CONTEXT,
//						((BindingElement) bm.getSelectedElement()).getContext(),
//						null),
//				new PropertyChangeEvent(conflictModel,
//						ConflictModel.PROP_CONFLICTS_REMOVE, null, conflict1),
//				new PropertyChangeEvent(conflict3,
//						BindingElement.PROP_CONFLICT, Boolean.TRUE,
//						Boolean.FALSE),
//				new PropertyChangeEvent(conflictModel,
//						ConflictModel.PROP_CONFLICTS, oldValue, null),
//				new PropertyChangeEvent(contextModel,
//						CommonModel.PROP_SELECTED_ELEMENT, dialog, null),
//				new PropertyChangeEvent(conflict1,
//						ModelElement.PROP_MODEL_OBJECT, bindingConflict1,
//						conflict1.getModelObject()),
//				new PropertyChangeEvent(conflict1, BindingElement.PROP_TRIGGER,
//						oldKeySequence, null),
//				new PropertyChangeEvent(conflict3, BindingElement.PROP_CONTEXT,
//						dialog, null),
//				new PropertyChangeEvent(conflict3,
//						ModelElement.PROP_MODEL_OBJECT, c3model,
//						c3parameterized),
//				new PropertyChangeEvent(conflict3,
//						BindingElement.PROP_TRIGGER, oldKeySequence, null),
//				new PropertyChangeEvent(bm,
//						BindingModel.PROP_CONFLICT_ELEMENT_MAP, null, conflict3),
//				new PropertyChangeEvent(conflict2, BindingElement.PROP_TRIGGER,
//						oldKeySequence, ctrl5), };
//		assertChanges(expected, events);
//	}
//
//	public void testCreateKeyBinding() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		final ContextModel cm = controller.getContextModel();
//		final ContextElement window = (ContextElement) cm
//				.getContextIdToElement().get(IContextService.CONTEXT_ID_WINDOW);
//
//		final BindingModel bm = controller.getBindingModel();
//		final BindingElement conflict4 = getBindingElement(bm, ID_CMD_CONFLICT4);
//		assertNull(conflict4.getContext());
//		Object c4model = conflict4.getModelObject();
//		assertTrue(c4model instanceof ParameterizedCommand);
//
//		bm.setSelectedElement(conflict4);
//		assertNull(cm.getSelectedElement());
//
//		// test setup vars
//		final ArrayList events = new ArrayList();
//		controller.addPropertyChangeListener(new IPropertyChangeListener() {
//			public void propertyChange(PropertyChangeEvent event) {
//				events.add(event);
//			}
//		});
//
//		KeySequence ctrl5 = KeySequence.getInstance("CTRL+5 N");
//		conflict4.setTrigger(ctrl5);
//		assertEquals(window, ((BindingElement) bm.getSelectedElement())
//				.getContext());
//		assertTrue(conflict4.getModelObject() instanceof KeyBinding);
//		assertEquals(cm.getSelectedElement(), conflict4.getContext());
//
//		PropertyChangeEvent[] expected = new PropertyChangeEvent[] {
//				new PropertyChangeEvent(conflict4, BindingElement.PROP_CONTEXT,
//						null, window),
//				new PropertyChangeEvent(conflict4,
//						BindingElement.PROP_USER_DELTA, new Integer(
//								Binding.SYSTEM), new Integer(Binding.USER)),
//				new PropertyChangeEvent(cm, CommonModel.PROP_SELECTED_ELEMENT,
//						null, conflict4.getContext()),
//				new PropertyChangeEvent(conflict4,
//						ModelElement.PROP_MODEL_OBJECT, c4model, conflict4
//								.getModelObject()),
//				new PropertyChangeEvent(conflict4, BindingElement.PROP_TRIGGER,
//						null, ctrl5), };
//		assertChanges(expected, events);
//	}
//
//	public void testChangeSchemes() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		SchemeModel sm = controller.getSchemeModel();
//		SchemeElement emacsScheme = null;
//		Iterator i = sm.getSchemes().iterator();
//		while (i.hasNext()) {
//			SchemeElement e = (SchemeElement) i.next();
//			if (e.getId().equals(SCHEME_EMACS_ID)) {
//				emacsScheme = e;
//			}
//		}
//		assertNotNull(emacsScheme);
//
//		BindingModel bm = controller.getBindingModel();
//		BindingElement quickSwitch = null;
//		int quickCount = 0;
//		i = bm.getBindings().iterator();
//		while (i.hasNext()) {
//			BindingElement e = (BindingElement) i.next();
//			if (e.getId().equals(ID_QUICK_SWITCH)) {
//				quickSwitch = e;
//				quickCount++;
//			}
//		}
//		assertNotNull(quickSwitch);
//		assertEquals(1, quickCount);
//
//		sm.setSelectedElement(emacsScheme);
//
//		i = bm.getBindings().iterator();
//		ArrayList quick2 = new ArrayList();
//		boolean foundOriginal = false;
//		while (i.hasNext()) {
//			BindingElement e = (BindingElement) i.next();
//			if (e.getId().equals(ID_QUICK_SWITCH)) {
//				quick2.add(e);
//				if (e == quickSwitch) {
//					foundOriginal = true;
//				}
//			}
//		}
//		assertEquals(2, quick2.size());
//		assertTrue(foundOriginal);
//	}
//
//	public void testChangeSchemesTwice() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		SchemeModel sm = controller.getSchemeModel();
//		SchemeElement emacsScheme = null;
//		SchemeElement defaultScheme = null;
//		Iterator i = sm.getSchemes().iterator();
//		while (i.hasNext()) {
//			SchemeElement e = (SchemeElement) i.next();
//			if (e.getId().equals(SCHEME_EMACS_ID)) {
//				emacsScheme = e;
//			} else if (e.getId().equals(
//					IBindingService.DEFAULT_DEFAULT_ACTIVE_SCHEME_ID)) {
//				defaultScheme = e;
//			}
//		}
//		assertNotNull(emacsScheme);
//		assertNotNull(defaultScheme);
//
//		BindingModel bm = controller.getBindingModel();
//		BindingElement quickSwitch = null;
//		int quickCount = 0;
//		i = bm.getBindings().iterator();
//		while (i.hasNext()) {
//			BindingElement e = (BindingElement) i.next();
//			if (e.getId().equals(ID_QUICK_SWITCH)) {
//				quickSwitch = e;
//				quickCount++;
//			}
//		}
//		assertNotNull(quickSwitch);
//		assertEquals(1, quickCount);
//
//		sm.setSelectedElement(emacsScheme);
//
//		i = bm.getBindings().iterator();
//		ArrayList quick2 = new ArrayList();
//		boolean foundOriginal = false;
//		while (i.hasNext()) {
//			BindingElement e = (BindingElement) i.next();
//			if (e.getId().equals(ID_QUICK_SWITCH)) {
//				quick2.add(e);
//				if (e == quickSwitch) {
//					foundOriginal = true;
//				}
//			}
//		}
//		assertEquals(2, quick2.size());
//		assertTrue(foundOriginal);
//
//		sm.setSelectedElement(defaultScheme);
//
//		i = bm.getBindings().iterator();
//		quick2.clear();
//		foundOriginal = false;
//		while (i.hasNext()) {
//			BindingElement e = (BindingElement) i.next();
//			if (e.getId().equals(ID_QUICK_SWITCH)) {
//				quick2.add(e);
//				if (e == quickSwitch) {
//					foundOriginal = true;
//				}
//			}
//		}
//		assertEquals(1, quick2.size());
//		assertTrue(foundOriginal);
//	}
//
//	public void testSchemesWithNoDefaultBinding() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		final SchemeModel sm = controller.getSchemeModel();
//		SchemeElement emacsScheme = null;
//		SchemeElement defaultScheme = null;
//		Iterator i = sm.getSchemes().iterator();
//		while (i.hasNext()) {
//			SchemeElement e = (SchemeElement) i.next();
//			if (e.getId().equals(SCHEME_EMACS_ID)) {
//				emacsScheme = e;
//			} else if (e.getId().equals(
//					IBindingService.DEFAULT_DEFAULT_ACTIVE_SCHEME_ID)) {
//				defaultScheme = e;
//			}
//		}
//		assertNotNull(emacsScheme);
//		assertNotNull(defaultScheme);
//
//		final BindingModel bm = controller.getBindingModel();
//		BindingElement emacsElement = getBindingElement(bm, ID_CMD_EMACS1);
//		assertNotNull(emacsElement);
//		assertTrue(emacsElement.getModelObject() instanceof ParameterizedCommand);
//
//		sm.setSelectedElement(emacsScheme);
//
//		emacsElement = getBindingElement(bm, ID_CMD_EMACS1);
//		assertTrue(emacsElement.getModelObject() instanceof KeyBinding);
//
//		sm.setSelectedElement(defaultScheme);
//
//		emacsElement = getBindingElement(bm, ID_CMD_EMACS1);
//		assertTrue(emacsElement.getModelObject() instanceof ParameterizedCommand);
//	}
//
//	public void testCopyBinding() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		BindingModel bm = controller.getBindingModel();
//		BindingElement activateEditor = null;
//		ArrayList activates = new ArrayList();
//		Iterator i = bm.getBindings().iterator();
//		while (i.hasNext()) {
//			BindingElement be = (BindingElement) i.next();
//			if (be.getId().equals(ID_ACTIVATE_EDITOR)) {
//				activates.add(be);
//				if (be.getModelObject() instanceof KeyBinding) {
//					activateEditor = be;
//				}
//			}
//		}
//		assertEquals(1, activates.size());
//		assertNotNull(activateEditor);
//
//		bm.setSelectedElement(activateEditor);
//		bm.copy();
//		activates.clear();
//		i = bm.getBindings().iterator();
//		while (i.hasNext()) {
//			BindingElement be = (BindingElement) i.next();
//			if (be.getId().equals(ID_ACTIVATE_EDITOR)) {
//				activates.add(be);
//			}
//		}
//		assertEquals(2, activates.size());
//	}
//
//	public void testCopyCommand() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		BindingModel bm = controller.getBindingModel();
//		BindingElement conflict4 = null;
//		ArrayList activates = new ArrayList();
//		Iterator i = bm.getBindings().iterator();
//		while (i.hasNext()) {
//			BindingElement be = (BindingElement) i.next();
//			if (be.getId().equals(ID_CMD_CONFLICT4)) {
//				activates.add(be);
//				if (be.getModelObject() instanceof ParameterizedCommand) {
//					conflict4 = be;
//				}
//			}
//		}
//		assertEquals(1, activates.size());
//		assertNotNull(conflict4);
//
//		bm.setSelectedElement(conflict4);
//		bm.copy();
//		activates.clear();
//		i = bm.getBindings().iterator();
//		while (i.hasNext()) {
//			BindingElement be = (BindingElement) i.next();
//			if (be.getId().equals(ID_CMD_CONFLICT4)) {
//				activates.add(be);
//			}
//		}
//		assertEquals(1, activates.size());
//	}
//
//	public void testRemoveActiveEditor() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		BindingModel bm = controller.getBindingModel();
//		BindingElement activateEditor = getBindingElement(bm,
//				ID_ACTIVATE_EDITOR);
//
//		assertNotNull(activateEditor);
//		assertTrue(activateEditor.getModelObject() instanceof KeyBinding);
//
//		bm.setSelectedElement(activateEditor);
//		bm.remove();
//
//		assertTrue(activateEditor.getModelObject() instanceof ParameterizedCommand);
//	}
//
//	public void testRestoreBinding() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		BindingModel bm = controller.getBindingModel();
//		BindingElement activateEditor = getBindingElement(bm,
//				ID_ACTIVATE_EDITOR);
//
//		bm.setSelectedElement(activateEditor);
//
//		KeySequence ctrl5 = KeySequence.getInstance("CTRL+5 N");
//		activateEditor.setTrigger(ctrl5);
//
//		assertEquals(new Integer(Binding.USER), activateEditor.getUserDelta());
//		bm.copy();
//		BindingElement activeTwo = (BindingElement) bm.getSelectedElement();
//		assertFalse(activateEditor == activeTwo);
//
//		activeTwo.setTrigger(KeySequence.getInstance("CTRL+5 M"));
//		assertEquals(new Integer(Binding.USER), activeTwo.getUserDelta());
//
//		ArrayList activates = new ArrayList();
//		Iterator i = bm.getBindings().iterator();
//		while (i.hasNext()) {
//			BindingElement be = (BindingElement) i.next();
//			if (be.getId().equals(ID_ACTIVATE_EDITOR)) {
//				activates.add(be);
//			}
//		}
//		assertEquals(2, activates.size());
//
//		bm.restoreBinding(controller.getContextModel());
//
//		activates = new ArrayList();
//		i = bm.getBindings().iterator();
//		while (i.hasNext()) {
//			BindingElement be = (BindingElement) i.next();
//			if (be.getId().equals(ID_ACTIVATE_EDITOR)) {
//				activates.add(be);
//				activateEditor = be;
//			}
//		}
//		assertEquals(1, activates.size());
//		assertEquals(new Integer(Binding.SYSTEM), activateEditor.getUserDelta());
//	}
//
//	public void testRestoreCommand() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		final ContextModel cm = controller.getContextModel();
//		final ContextElement window = (ContextElement) cm
//				.getContextIdToElement().get(IContextService.CONTEXT_ID_WINDOW);
//
//		final BindingModel bm = controller.getBindingModel();
//		BindingElement conflict4 = getBindingElement(bm, ID_CMD_CONFLICT4);
//		assertNull(conflict4.getContext());
//		Object c4model = conflict4.getModelObject();
//		assertTrue(c4model instanceof ParameterizedCommand);
//
//		bm.setSelectedElement(conflict4);
//		assertNull(cm.getSelectedElement());
//
//		KeySequence ctrl5 = KeySequence.getInstance("CTRL+5 N");
//		conflict4.setTrigger(ctrl5);
//		assertEquals(window, ((BindingElement) bm.getSelectedElement())
//				.getContext());
//		assertTrue(conflict4.getModelObject() instanceof KeyBinding);
//
//		bm.setSelectedElement(conflict4);
//		bm.restoreBinding(cm);
//
//		conflict4 = getBindingElement(bm, ID_CMD_CONFLICT4);
//		assertTrue(conflict4.getModelObject() instanceof ParameterizedCommand);
//	}
//
//	public void testRestoreContext() throws Exception {
//		final KeyController controller = new KeyController();
//		controller.init(getWorkbench());
//
//		final ContextModel cm = controller.getContextModel();
//		final ContextElement dialog = (ContextElement) cm
//				.getContextIdToElement().get(IContextService.CONTEXT_ID_DIALOG);
//
//		final BindingModel bm = controller.getBindingModel();
//		BindingElement activateEditor = getBindingElement(bm,
//				ID_ACTIVATE_EDITOR);
//		activateEditor.setContext(dialog);
//
//		bm.setSelectedElement(activateEditor);
//		bm.restoreBinding(cm);
//
//		activateEditor = getBindingElement(bm, ID_ACTIVATE_EDITOR);
//		assertNotNull(activateEditor);
//	}
//
//	private void assertChangeEvent(int eventNum, PropertyChangeEvent expected,
//			PropertyChangeEvent event) {
//		assertEquals("source: " + eventNum, expected.getSource(), event
//				.getSource());
//		assertEquals("property: " + eventNum, expected.getProperty(), event
//				.getProperty());
//		assertEquals("old: " + eventNum, expected.getOldValue(), event
//				.getOldValue());
//		assertEquals("new: " + eventNum, expected.getNewValue(), event
//				.getNewValue());
//	}
//
//	private void assertChanges(PropertyChangeEvent[] expected, List events) {
//		assertEquals("events length", expected.length, events.size());
//		for (int i = 0; i < expected.length; i++) {
//			assertChangeEvent(i, expected[i], (PropertyChangeEvent) events
//					.get(i));
//		}
//	}
//
//	private BindingElement getBindingElement(BindingModel bm, String bindingId) {
//		BindingElement quickAccess = null;
//		Iterator i = bm.getBindings().iterator();
//		while (i.hasNext()) {
//			BindingElement e = (BindingElement) i.next();
//			if (e.getId().equals(bindingId)) {
//				quickAccess = e;
//			}
//		}
//		return quickAccess;
//	}
//}
